﻿using BLevy.Entidad;
using BLevy.Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BLevy.UI
{
    public partial class frmCuponSeguimiento : Form
    {
        private int cupon_id;
        private string numero_cupon;
        public frmCuponSeguimiento(int id)
        {
            InitializeComponent();

            cupon_id = id;
        }

        private void IniciarControles()
        {
            txtFechaCobro.Enabled = false;
            txtFechaCupon.Enabled = false;
            txtFormaPago.Enabled = false;
            txtImporte.Enabled = false;
            txtImporte1.Enabled = false;
            txtImporte2.Enabled = false;
            txtNroCupon.Enabled = false;
            txtVencimiento_1.Enabled = false;
            txtVencimiento_2.Enabled = false;
            txtNroCertificado.Enabled = false;
            txtSocio.Enabled = false;

        }

        private void frmCuponSeguimiento_Load(object sender, EventArgs e)
        {
            IniciarControles();

            FindCuponPorId(cupon_id);
            FindCobro(cupon_id);
            FindMovimientos();
        }


        private void FindCuponPorId(int cupon_id)
        {
            try
            {
                Cupon cupon = Cupones.FindById(cupon_id);
                numero_cupon = cupon.numero;

                txtNroCupon.Text = cupon.numero;
                txtFechaCupon.Text = cupon.fecha_emision.ToShortDateString();

                IList<Periodo> periodos = Periodos.GetPeriodosByIdCupon(cupon.id);
                periodos.OrderByDescending(x => x.fecha_generacion);

                txtVencimiento_1.Text = periodos[0].vencimiento_1.ToShortDateString();
                txtVencimiento_2.Text = periodos[0].vencimiento_2.ToShortDateString();

                txtImporte1.Text = cupon.total.ToString();
                txtImporte2.Text = (cupon.total + periodos[0].recargo).ToString();

                cupon.detalles = Cupones.FindAllDetallesByIdCupon(cupon_id);

                string periodosincluidos = string.Empty;
                foreach (var row in cupon.detalles)
                {
                    PeriodoSocio periodosocio = PeriodosSocios.FindById(row.periodosocio_id);
                    Periodo periodo = Periodos.FindById(periodosocio.periodo_id);

                    periodosincluidos += periodo.periodo.ToShortDateString() + " - ";

                }

                lblPeriodos.Text = periodosincluidos;

                Socio socio = Negocio.Socios.FindById(cupon.socio_id);

                txtNroCertificado.Text = socio.numero_certificado.ToString();
                txtSocio.Text = socio.apellido + ", " + socio.nombres;

                if (cupon.estado == "P")
                {
                    lblEstado.Text = "PAGO";
                    lblEstado.BackColor = Color.LawnGreen;
                }
                else
                {
                    lblEstado.Text = "IMPAGO";
                    lblEstado.BackColor = Color.Red;
                    lblEstado.ForeColor = Color.White;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void FindCobro(int cupon_id)
        {
            try
            {
                Cobro cobro = Cobros.FindByIdCupon(cupon_id);

                if (cobro != null)
                {
                    txtImporte.Text = cobro.total.ToString();
                    txtFechaCobro.Text = cobro.fecha.ToShortDateString();

                    FormaPago formapago = FormasPagos.FindById(cobro.formapago_id);

                    txtFormaPago.Text = formapago.forma_pago;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        private void FindMovimientos()
        {
            try
            {
                IList<CobradorCupon> movimientos = Cobradores.FindAllCondicional(numero_cupon, "", null, null, null);

                int visitas = movimientos.Where(x => x.tipo_movimiento == "E").Count();

                dgvMovimientos.Rows.Clear();
                foreach (var row in movimientos)
                {
                    dgvMovimientos.Rows.Add(row.fecha.ToShortDateString(), row.cobrador.nombre_completo,
                        row.tipo_movimiento);
                }

                dgvMovimientos.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

                lblVisitas.Text = visitas.ToString();
                lblVisitas.BackColor = Color.LightYellow;
            }
            catch (Exception e)
            {
                MessageBox.Show("Error : " + e.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
